package proyectobdii;

import java.util.LinkedList;

class Procedure {
    private String nombre;
    private String tipo;
    private LinkedList<Parameter> parametros;

    public Procedure(String nombre, LinkedList<Parameter> parametros,String tipoDevuelve){
        //System.out.println("nombre: "+nombre+" param: "+parametros.size()+"ret: "+tipoDevuelve);
        this.nombre=nombre;
        if(parametros==null){
            this.parametros= new LinkedList<Parameter>();
        }else{
            this.parametros=parametros;
        }
        tipo=tipoDevuelve;
    }

    public String getNombre(){
        return nombre;
    }

    public String getTipo(){
        if(tipo==null || tipo.equals("")){
            return "VOID";
        }else{
            return tipo;
        }
    }

    public LinkedList<Parameter> getParametros(){
        return parametros;
    }

    public boolean equals(Procedure other){
        return compareTo(other)==0;
    }

    public int compareTo(Procedure other){
        //si son exactamente iguales retorna 0
        //si tienen el mismo nombre pero distinta estructura 1
        //si no coincide en nombre retorna -1
        if(nombre.equals(other.nombre)){
            if(getTipo().equals(other.getTipo())&& equalsLinkedList(parametros,other.getParametros())){
                return 0;
            }else{
                return 1;
            }
        }else{
            return -1;
        }
    }

    private boolean equalsLinkedList(LinkedList<Parameter> l1,LinkedList<Parameter> l2 ){
        int longitud=l1.size();
        //System.out.println("logitudes: "+longitud+" "+l2.size());
        if(longitud==l2.size()){
            boolean bandera=true;
            for(int i=0;i<longitud && bandera;i++){
          //     System.out.println("***");
               bandera= bandera && l1.get(i).equals(l2.get(i));
            }
            return bandera;
        }else{
            return false;
        }
    }

    public String toString(){
        return nombre + " " + "tipo: "+tipo + " "+ parametros.toString();
    }
}
